Material UI is a Material Design library made for React.
It’s a set of React components that have Material Design styles.
In this article, we’ll look at how to add dialog boxes with Material UI.
Dialog
A dialog box is used to let users know about some information.
To add one, we can use the Dialog
component.
For example, we can write:
import React from "react";
import Button from "@material-ui/core/Button";
import Dialog from "@material-ui/core/Dialog";
import DialogTitle from "@material-ui/core/DialogTitle";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
export default function App() {
const [open, setOpen] = React.useState(false);
const handleClose = () => {
setOpen(false);
};
return (
<div>
<Button variant="outlined" color="primary" onClick={() => setOpen(true)}>
Open simple dialog
</Button>
<Dialog onClose={handleClose} open={open}>
<DialogTitle id="simple-dialog-title">dialog</DialogTitle>
<List>
<ListItem autoFocus button onClick={handleClose}>
close
</ListItem>
</List>
</Dialog>
</div>
);
}
to add a dialog with some items in it.
We added a List
with a ListItem
which is a button.
We can click it to close the dialog box with the setOpen
function with the false
argument.
Then open
prop controls whether it’s opened or not.
handleClose
lets us close the dialog by setting open
to false
with setOpen
.
variant
set to outlined
lets us add an outline.
Alerts
Alerts are used for display urgent messages.
To add one, we can use the components that we have before and add the DialogContent
, DialogContentText
, and DialogActions
components to add the dialog content.
For example, we can write:
import React from "react";
import Button from "@material-ui/core/Button";
import Dialog from "@material-ui/core/Dialog";
import DialogTitle from "@material-ui/core/DialogTitle";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";
import DialogActions from "@material-ui/core/DialogActions";
export default function App() {
const [open, setOpen] = React.useState(false);
const handleClose = () => {
setOpen(false);
};
return (
<div>
<Button variant="outlined" color="primary" onClick={() => setOpen(true)}>
Open simple dialog
</Button>
<Dialog open={open} onClose={handleClose}>
<DialogTitle>Confirm</DialogTitle>
<DialogContent>
<DialogContentText>Are you sure?</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary">
no
</Button>
<Button onClick={handleClose} color="primary" autoFocus>
yes
</Button>
</DialogActions>
</Dialog>
</div>
);
}
to add everything.
DialogTitle
has the title.
DialogContent
has the content.
DialogContentText
is where we put the text for the dialog.
DialogActions
has the buttons to let users do something.
Transitions
We can add transition effects to animate when dialogs open.
For example, we can write:
import React from "react";
import Button from "@material-ui/core/Button";
import Dialog from "@material-ui/core/Dialog";
import DialogTitle from "@material-ui/core/DialogTitle";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";
import DialogActions from "@material-ui/core/DialogActions";
import Slide from "@material-ui/core/Slide";
const Transition = React.forwardRef((props, ref) => {
return <Slide direction="down" ref={ref} {...props} />;
});
export default function App() {
const [open, setOpen] = React.useState(false);
const handleClose = () => {
setOpen(false);
};
return (
<div>
<Button variant="outlined" color="primary" onClick={() => setOpen(true)}>
Open simple dialog
</Button>
<Dialog
open={open}
onClose={handleClose}
TransitionComponent={Transition}
>
<DialogTitle>Confirm</DialogTitle>
<DialogContent>
<DialogContentText>Are you sure?</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary">
no
</Button>
<Button onClick={handleClose} color="primary" autoFocus>
yes
</Button>
</DialogActions>
</Dialog>
</div>
);
}
We created the Transition
component which uses the Slide
component to create a slide down effect.
direction
sets the direction of the slide.
We’ve to pass the ref of the dialog into the Slide
prop to make it slide.
Then we add the TransitionComponent
prop to pass in the Transition
component to it.
Form Dialogs
We can add forms inside dialog boxes.
For example, we can write:
import React from "react";
import Button from "@material-ui/core/Button";
import Dialog from "@material-ui/core/Dialog";
import DialogTitle from "@material-ui/core/DialogTitle";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";
import DialogActions from "@material-ui/core/DialogActions";
import TextField from "@material-ui/core/TextField";
export default function App() {
const [open, setOpen] = React.useState(false);
const handleClose = () => {
setOpen(false);
};
return (
<div>
<Button variant="outlined" color="primary" onClick={() => setOpen(true)}>
Open simple dialog
</Button>
<Dialog open={open} onClose={handleClose}>
<DialogTitle>Confirm</DialogTitle>
<DialogContent>
<DialogContentText>Enter your name</DialogContentText>
<TextField
autoFocus
margin="dense"
id="name"
label="name"
type="text"
fullWidth
/>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary">
cancel
</Button>
<Button onClick={handleClose} color="primary" autoFocus>
ok
</Button>
</DialogActions>
</Dialog>
</div>
);
}
to add a TextField
inside our dialog box.
We make it full width with the fullWidth
prop to make it fit inside the dialog box.
Conclusion
We can add a dialog to display various things.
It can include buttons and forms.
Transition effects can also be included.